import axios from "axios"

// 创建axios实例
const service = axios.create({
	baseURL: import.meta.env.VITE_API_BASE_URL || "", // api基础URL，可从环境变量配置
	timeout: 10000, // 请求超时时间
	withCredentials: true, // 让浏览器携带/接收 Cookie，后端才能识别登录态
	headers: {
		"Content-Type": "application/json;charset=utf-8",
	},
})

// 请求拦截器
service.interceptors.request.use(
	(config) => {
		// 可以在这里添加token等认证信息
		// const token = localStorage.getItem('token')
		// if (token) {
		//   config.headers['Authorization'] = `Bearer ${token}`
		// }
		return config
	},
	(error) => {
		console.error("请求错误:", error)
		return Promise.reject(error)
	},
)

// 响应拦截器
service.interceptors.response.use(
	(response) => {
		const res = response.data
		// 根据后端约定的数据格式进行处理
		// 这里可以统一处理响应码
		return res
	},
	(error) => {
		console.error("响应错误:", error)
		
		// 统一处理 401 未授权错误（未登录或登录过期）
		if (error.response && error.response.status === 401) {
			// 清除本地存储的登录信息
			localStorage.removeItem('token')
			localStorage.removeItem('username')
			localStorage.removeItem('enterpriseInfo')
			
			// 提示用户
			console.warn('登录已过期，请重新登录')
			
			// 跳转到登录页
			// 使用 window.location.href 而不是 router，因为这里无法直接访问 router 实例
			if (window.location.pathname !== '/login') {
				window.location.href = '/login'
			}
			
			return Promise.reject(new Error('登录已过期，请重新登录'))
		}
		
		// 其他错误正常处理
		return Promise.reject(error)
	},
)

// 创建request对象，提供get、post等方法
const request = {
	// GET请求方法
	get(options) {
		return service({
			...options,
			method: "GET",
			params: options.params || {},
		})
	},

	// POST请求方法
	post(options) {
		return service({
			...options,
			method: "POST",
			data: options.params || {},
		})
	},

	// PUT请求方法
	put(options) {
		return service({
			...options,
			method: "PUT",
			data: options.params || {},
		})
	},

	// DELETE请求方法
	delete(options) {
		return service({
			...options,
			method: "DELETE",
			params: options.params || {},
		})
	},

	// PATCH请求方法
	patch(options) {
		return service({
			...options,
			method: "PATCH",
			data: options.params || {},
		})
	},
}

export default request
